/*
 * @Descripttion: 拓展app
 * @version: 
 * @Author: turingchang
 * @Date: 2020-08-22 16:18:21
 * @LastEditors: turingchang
 * @LastEditTime: 2020-09-04 17:10:07
 */



const Enums =require('../enum/enums');
const Utils =require('../common/utils');
const Hprose = require("hprose");
const Colors = require( "colors")

const user = Symbol('Application#user');
const token = Symbol('Application#token');
const hprose = Symbol('Application#hprose');
const colors = Symbol('Application#colors');

const enums = Symbol('Application#enums');
const utils = Symbol('Application#utils');

//var request_id = Symbol('Application#request_id');

//为app注入属性：使用Symbol + Getter 模式，避免每访问一次就重新计算一次
    //1、const enums = Symbol('Application#enums');
    //2、get enums(){
            //if (!this[enums]) {            
                //this[enums] = Enum;
            //}
            //return this[enums];
        //}  

// 注入属性/方法,挂载到app
module.exports ={    
    get enums(){
        if (!this[enums]) {
            this[enums] = Enums;
        }
        return this[enums];
    }, 
    get utils(){
        if (!this[utils]) {
            this[utils] = Utils;
        }
        return this[utils];
    } ,    
    get token(){
        return this[token];
    },
    set token(t){
        this[token] =t;
    },
    get user(){
        return this[user];
    },
    set user(u){
        this[user] =u;
    }, 
    get hprose(){
        if (!this[hprose]) {
            this[hprose] = new Hprose.HttpService();
        }
        return this[hprose];
    },
    get colors(){
        if (!this[colors]) {
            this[colors] = Colors;
        }
        return this[colors];
    },
    // mapping(dataModel,toModel){
    //     if(this.utils.validator.isNull(model)){ 
    //         return null;
    //     }
    //     if(this.utils.validator.isNull(toModel)){ 
    //         return null;
    //     }
    //     var fordata =dataModel;
    //     var forkey ='';
    //     try{
    //         if(!this.utils.validator.isNull(dataModel.dataValues)){  //如果是sequelize对象，则取出数据列
    //             fordata =dataModel.dataValues;
    //         }
    //     }catch{}

    //     for (let fromkey in fordata) {
    //         for (let tokey in toModel) {
            
    //         }
    //     }

    // }
    
    

}


